In general, a computer application uses an application programming interface (API) that provide API functionality specific to the peripheral devices accessible to the computer on which the application runs. As such, the application may be configured with API functions to receive and send data readable by the specific peripheral devices and to access device-specific implementations of peripheral features, e.g., printing, scanning, etc. The application API may readily cause the native drivers installed on the computer to execute and control the peripheral devices. This configuration advantageously provides an efficient operation for the application on this computer.
However, the application in that same form typically may not use those same API functions to access a similar feature on a different peripheral device. Nor may the application be ported to another computer for use with its peripheral devices. This is because the device-specific implementations of the peripheral features of the different or new peripheral devices are unrecognizable and incompatible with the application. Hence, the application is unable to access the native drivers of these peripheral devices. Therefore, in order to access the different or new peripheral devices, the application must undergo significant modification in order to add the device-specific functionality of these devices. This requires significant time and labor for a system developer.
With the emergence of large computer networks having computers with a plurality of operating systems and a variety of peripheral devices that provide the same, like, or different features, the current approach to application and API design is impractical. No system can afford the time and expense of providing related applications with APIs dependent on device-specific features for each and every permutation of the computers and their peripheral devices in the network.
Accordingly, there is a need in the art for a generic device-independent solution that may commonly be used among multiple applications and computers to access device-dependent features through the corresponding native drivers of the peripheral devices.